/********************************************************************************
    * 文件名称 ：E53_IA1.c
    * 作     者：小熊派开源社区
    * 版     本：V1.0
    * 编写日期 ：2019-5-27
    * 功     能：E53_IA1扩展板驱动
*********************************************************************************
    * 说    明 ：本例程配套小熊派开源社区开发板使用
    *
    * 淘     宝：https://shop336827451.taobao.com/
    * 论     坛：https://bbs.huaweicloud.com/forum/forum-734-1.html
    * 微信公众号：小熊派开源社区
*********************************************************************************/
#include "E53_IA1.h"
#include <board.h>
#include <rtdevice.h>
#include "sht3x.h"

static rt_device_t bh1750_dev = RT_NULL;
static sht3x_device_t sht30_dev = RT_NULL;

/***************************************************************
* 函数名称: Init_BH1750
* 说    明: 写命令初始化BH1750
* 参    数: 无
* 返 回 值: 无
***************************************************************/
static void Init_BH1750(void)
{
    bh1750_dev = rt_device_find("li_bh1750");
    if (bh1750_dev == RT_NULL)
    {
        rt_kprintf("Can't find device:li_bh1750\n");
    }

    /* 以轮询模式打开传感器设备 */
    if (rt_device_open(bh1750_dev, RT_DEVICE_FLAG_RDONLY) != RT_EOK)
    {
        rt_kprintf("open device failed!");
    }
}

/***************************************************************
* 函数名称: Init_SHT30
* 说    明: 初始化SHT30，设置测量周期
* 参    数: 无
* 返 回 值: 无
***************************************************************/
static void Init_SHT30(void)
{
    rt_uint8_t sht_addr = SHT3X_ADDR_PD ;
    sht30_dev = sht3x_init("i2c1", sht_addr);
    if(!sht30_dev)
        {
            rt_kprintf("sht3x probe failed, check input args\n");
        }else
        {
            rt_kprintf("sht3x probed, addr:0x%x\n", sht_addr) ;
        }
}

/***************************************************************
* 函数名称: E53_IA1_Init
* 说    明: 初始化E53_IA1
* 参    数: 无
* 返 回 值: 无
***************************************************************/
void E53_IA1_Init(void)
{
    Init_BH1750();
    Init_SHT30();
    rt_pin_mode(E53_GPIO1, PIN_MODE_OUTPUT);//输出模式
    rt_pin_mode(E53_GPIO3, PIN_MODE_OUTPUT);//输出模式
}

/***************************************************************
* 函数名称: E53_IA1_Read_Data
* 说    明: 测量光照强度、温度、湿度
* 参    数: 无
* 返 回 值: 无
***************************************************************/
void E53_IA1_Read_Data(E53_IA1_Data *ReadData)
{
    struct rt_sensor_data data;
    rt_size_t res;
    res = rt_device_read(bh1750_dev, 0, &data, 1);
    if (res != 1)
    {
        rt_kprintf("read data failed!size is %d", res);
    }
    else
    {
        ReadData->Lux = (&data)->data.light / 10;
    }

    if (sht30_dev)
    {
        /* read the sensor data */
        sht3x_read_singleshot(sht30_dev);
        ReadData->Temperature = sht30_dev->temperature;
        ReadData->Humidity = sht30_dev->humidity;
    }
    else
    {
        rt_kprintf("Please using 'sht3x probe <i2c dev name> <pu/pd>' first\n");
    }
}
/***************************************************************
 * 函数名称: E53_IA1_Light_Set
 * 说    明: 灯状态设置
 * 参    数: status,ENUM枚举的数据
 *                                    OFF,关
 *                                    ON,开
 * 返 回 值: 无
 ***************************************************************/
void E53_IA1_Light_Set(E53_IA1_Status status)
{
    if (status == ON) {
        rt_pin_write(E53_GPIO1, PIN_HIGH);
    }

    if (status == OFF) {
        rt_pin_write(E53_GPIO1, PIN_LOW);
    }
}

/***************************************************************
 * 函数名称: E53_IA1_Motor_Set
 * 说    明: 电机状态设置
 * 参    数: status,ENUM枚举的数据
 *                                    OFF,关
 *                                    ON,开
 * 返 回 值: 无
 ***************************************************************/
void E53_IA1_Motor_Set(E53_IA1_Status status)
{
    if (status == ON) {
        rt_pin_write(E53_GPIO3, PIN_HIGH);
    }

    if (status == OFF) {
        rt_pin_write(E53_GPIO3, PIN_LOW);
    }
}


